lst = [
    ('1', 'a'),
    ('1', 'b'),
    ('1', 'b'),
    ('2', 'c'),
    ('2', 'c'),
    ('2', 'd'),
    ('2', 'c'),
    ('2', 'c'),
    ('3', 'a'),
    ('3', 'c'),
]

# ==>
# {
    # '1':['a', 'b'],
    # '2':['c', 'd'],
    # '3':['a', 'c'],
# }
d = {}
for k, v in lst:
    #if not v in d.get(k, []):
    #    if d.get(k, None):
    #        d[k].append(v)
    #    else:
    #        d[k]=[v,]
    if not k in d:
        d[k] = [v, ]
        continue
    if not v in d[k]:
        d[k].append(v)
            
            

print d

lst = [
    ('tu1', 'tn1', 'lu1', 'ln1'),
    ('tu1', 'tn1', 'lu2', 'ln2'),
    ('tu1', 'tn1', 'lu3', 'ln3'),
    ('tu1', 'tn1', 'lu4', 'ln4'),
    ('tu2', 'tn2', 'lu1', 'ln1'),
    ('tu2', 'tn2', 'lu2', 'ln2'),
    ('tu2', 'tn2', 'lu3', 'ln3'),
    ('tu2', 'tn2', 'lu4', 'ln4'),
    ('tu2', 'tn2', 'lu5', 'ln5'),
]

# d = {
#     'tu1':{
#         'tn1': tn1,
#         'l':[
#             (lu1, ln1),
#             (lu2, ln2),
#         ]
#     }
# }
d = {}
for tu, tn, lu, ln in lst:
    if not tu in d:
        d[tu] = {
            'tn':tn,
            'l':[
                (lu, ln),
            ]
        }
        continue
    if not (lu, ln) in d[tu]['l']:
        d[tu]['l'].append((lu, ln))
        
print d

{
	'tu1': {
		'tn': 'tn1',
		'l': [  ('lu1', 'ln1'),
                ('lu2', 'ln2'),
                ('lu3', 'ln3'),
                ('lu4', 'ln4')]
	},
	'tu2': {
		'tn': 'tn2',
		'l': [  ('lu1', 'ln1'),
                ('lu2', 'ln2'),
                ('lu3', 'ln3'),
                ('lu4', 'ln4'),
                ('lu5', 'ln5')]
	}
}

l = []
for i in d:
    print i
    l.append(
        {
            "teacher_key": i,
            "teacher_name": i['tn'],
            "lessons":list(i['l'])
        }
    )
    
print l